package com.sojson.util;

import com.sojson.constant.Constant;
import com.sojson.constant.ConstantByMap;
import com.sojson.constant.IpConfig;
import com.sojson.enums.core.ELoginDeviceType;
import com.sojson.util.bean.LoginParam;
import com.sojson.util.bean.OtherAuthcCallBack;
import com.sojson.util.bean.OtherUser;
import com.sojson.util.enums.ELoginOtherType;
import com.sojson.util.httpclient.HttpClientUtil;
import com.sojson.util.json.JsonUtil;
import com.sojson.util.pay.wx.WxUtil;
import com.sojson.util.pay.wx.enums.EWxApiType;
import com.sojson.util.qq.QqUtil;
import com.sojson.util.servlet.ServletUtil;
import com.sojson.util.xlwb.XlwbUtil;

/**
 * 第三方接口工具类
 *
 * @author liu
 * @date 2020-09-11
 */
public class OtherUtil {

    /** 获取第三方授权CODE的回调路径 */
    public static final String AUTHC_CODE_CALL_BACK =
        ServletUtil.getMappingUrl(new StringBuilder(ConstantByMap.CONTROLLER_MAPPING_OPEN_OPEN).append("/authc")
            .append(Constant.PROPERTIES.getProperty("so.controller.mapping.open.other.authcCallBack")).toString());

    /**
     * 获取认证code
     *
     * @param otherLoginType
     * @throws Exception
     */
    public static void getCode(LoginParam loginParam) throws Exception {
        Integer loginType = loginParam.getLoginType();
        Integer cellphoneOrComputer = loginParam.getCellphoneOrComputer();
        // 回调路径
        String url = null;

        // 获取第三方接口路径
        Integer qq = ELoginOtherType.QQ.getCode();
        Integer wx = ELoginOtherType.WX.getCode();
        Integer xlwb = ELoginOtherType.XLWB.getCode();
        if (ELoginDeviceType.COMPUTER.getCode() == cellphoneOrComputer) {
            // ========================↑↑↑↑↑电脑登录↑↑↑↑↑========================
            if (qq.equals(loginType)) {
                // ====================↑↑↑↑↑QQ登录↑↑↑↑↑====================
                url = String.format(QqUtil.WEB_CODE_URL, StringUtil.encodeUrl(IpConfig.getUrl() + AUTHC_CODE_CALL_BACK),
                    StringUtil.encode(JsonUtil.objectToJson(loginParam)));
            } else if (wx.equals(loginType)) {
                // ====================↑↑↑↑↑微信登录↑↑↑↑↑===================
                url = String.format(EWxApiType.WEB_CODE_URL.getType(),
                    StringUtil.encodeUrl(IpConfig.getUrl() + AUTHC_CODE_CALL_BACK),
                    StringUtil.encode(JsonUtil.objectToJson(loginParam)));
            } else if (xlwb.equals(loginType)) {
                // ====================↑↑↑↑↑新浪微博登录↑↑↑↑↑================
                url =
                    String.format(XlwbUtil.WEB_CODE_URL, StringUtil.encodeUrl(IpConfig.getUrl() + AUTHC_CODE_CALL_BACK),
                        StringUtil.encode(StringUtil.encode(JsonUtil.objectToJson(loginParam))));
            }
        } else if (ELoginDeviceType.CELLPHONE.getCode() == cellphoneOrComputer) {
            // ========================↑↑↑↑↑手机登录↑↑↑↑↑========================
            if (qq.equals(loginType)) {
                // ====================↑↑↑↑↑QQ登录↑↑↑↑↑====================
                url = String.format(QqUtil.MOBILE_CODE_URL,
                    StringUtil.encodeUrl(IpConfig.getUrl() + AUTHC_CODE_CALL_BACK),
                    StringUtil.encode(JsonUtil.objectToJson(loginParam)));
            } else if (wx.equals(loginType)) {
                // ====================↑↑↑↑↑微信登录↑↑↑↑↑===================
                url = String.format(EWxApiType.MOBILE_CODE_URL.getType(),
                    StringUtil.encodeUrl(IpConfig.getUrl() + AUTHC_CODE_CALL_BACK),
                    StringUtil.encode(JsonUtil.objectToJson(loginParam)));
            } else if (xlwb.equals(loginType)) {
                // ====================↑↑↑↑↑新浪微博登录↑↑↑↑↑================
                url = String.format(XlwbUtil.MOBILE_CODE_URL,
                    StringUtil.encodeUrl(IpConfig.getUrl() + AUTHC_CODE_CALL_BACK),
                    StringUtil.encode(StringUtil.encode(JsonUtil.objectToJson(loginParam))));
            }
        }

        // 如果有路径就跳转
        if (StringUtil.isNotBlankObject(url)) {
            HttpClientUtil.redirect(url);
        }
    }

    /**
     * 认证
     *
     * @return
     * @throws Exception
     */
    public static OtherUser authc(OtherAuthcCallBack otherCallBack) throws Exception {
        OtherUser user = null;
        LoginParam loginParam = otherCallBack.getOtherLogin();
        // 获取参数
        Integer loginType = loginParam.getLoginType();

        // 根据参数验证
        if (ELoginOtherType.QQ.getCode() == loginType) {
            // ========================↑↑↑↑↑QQ登录↑↑↑↑↑=========================
            user = QqUtil.getUserMessage(otherCallBack.getCode());
        } else if (ELoginOtherType.WX.getCode() == loginType) {
            // ========================↑↑↑↑↑微信登录↑↑↑↑↑========================
            user = WxUtil.getUserMessage(otherCallBack.getCode());
        } else if (ELoginOtherType.WX_XCX.getCode() == loginType) {
            // ========================↑↑↑↑↑微信小程序登录↑↑↑↑↑========================
            user = WxUtil.getUserMessageXcx(otherCallBack.getCode());
        } else if (ELoginOtherType.XLWB.getCode() == loginType) {
            // ========================↑↑↑↑↑新浪微博登录↑↑↑↑↑=====================
            user = XlwbUtil.getUserMessage(otherCallBack.getCode());
        }

        return user;
    }

}